package com.ebt.m.proposal_v2.widget.common;

import android.content.Context;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;

import com.ebt.m.proposal_v2.helper.ThemeHelper;
import com.ebt.m.proposal_v2.utils.ViewUtils;

/**
 * 通用标签
 * <p>
 *    1、 推荐使用initDefaultMode()或initCheckMode()初始化背景资源，针对不同的模式只能初始化一次
 *    2、 在CheckMode下，可以通过check()或toggleCheck()切换选中状态
 *    3、 根据功能不同，分为Check模式与Default模式
 *    4、 Check模式：通过切换来改变View样式； Default模式：适用点击Label返回情形
 * </p>
 *
 *
 * @author archer.qi
 *         Created on 2017/5/4.
 */
public class LabelView extends TextView {

    /* 默认的内间距- 水平*/
    private static final int DEFAULT_PADDING_HORIZONTAL = 4;
    /* 默认的内间距- 垂直*/
    private static final int DEFAULT_PADDING_VERTICAL = 8;
    /* 是否处于选中状态*/
    private boolean isChecking;
    /* 选择模式下背景 - 选择与非选择Drawable*/
    private GradientDrawable backgroundOnCheckMode;
    private GradientDrawable backgroundPressOnCheckMode;
    /* 默认模式下背景 - Selector*/
    private StateListDrawable backgroundSelectorOnDefaultMode;

    private Context mContext;

    public LabelView(Context context) {
        this(context, null);
    }

    public LabelView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    private void init() {
        setPadding(DEFAULT_PADDING_HORIZONTAL, DEFAULT_PADDING_VERTICAL,
                DEFAULT_PADDING_HORIZONTAL, DEFAULT_PADDING_VERTICAL);
        setGravity(Gravity.CENTER);

        setTextSize(ThemeHelper.getTextSizeNormal(mContext));
        setTextColor(ThemeHelper.getPrimaryContentColor(mContext));
    }

    public void check(boolean checked) {
        if(backgroundPressOnCheckMode == null || backgroundOnCheckMode == null) {
            throw new NullPointerException("background resource is null, please call initCheckMode() to init background");
        }
        ViewUtils.setBackgroundDrawable(this, checked ? backgroundPressOnCheckMode : backgroundOnCheckMode);
        isChecking = checked;
    }

    /**
     * 初始化Check模式
     *
     * @param color
     * @param colorWhenCheck
     */
    public void initCheckMode(int color, int colorWhenCheck) {
        this.backgroundOnCheckMode = ViewUtils.createCornerDrawable(mContext, color);
        this.backgroundPressOnCheckMode = ViewUtils.createCornerDrawable(mContext, colorWhenCheck);
        ViewUtils.setBackgroundDrawable(this, backgroundOnCheckMode);
    }

    /**
     * 初始化Default模式
     *
     * @param color
     * @param colorWhenPress
     */
    public void initDefaultMode(int color, int colorWhenPress) {
        this.backgroundSelectorOnDefaultMode = ViewUtils.createCorneredPressSelector(mContext, color, colorWhenPress);
        ViewUtils.setBackgroundDrawable(this, backgroundSelectorOnDefaultMode);
    }

    /**
     * 切换选中状态
     */
    public void toggleCheck() {
        isChecking = !isChecking;
        check(isChecking);
    }

}
